home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 2: CDPD 1 / Almathera Ten on Ten - Disc 2: CDPD 1.iso / pd / 301-325 / 316 / iff2c / src / iff2c.c next >
C/C++ Source or Header  |  1995-03-14  |  2KB  |  98 lines

  1. #include <stdio.h>
  2. #include <exec/types.h>
  3. #include "iff2c.h"
  4.  
  5. VOID
  6. BMap2C(stream, name, base, x, y, width, height, depth, flags)
  7. FILE     *stream;
  8. UBYTE     *name, *base;
  9. SHORT     x, y;
  10. USHORT     width, height, depth;
  11. UBYTE     flags;
  12. {
  13.   BOOL       empty;
  14.   UBYTE    i, temp[10], pl_pick=0x00, pl_onoff=0x00;
  15.   USHORT   rows, bpr, d_word, d, r, b;      /* bpr = bytes per row   */
  16.   SHORT    firstprinted=-1;
  17.  
  18. #ifdef AMIGA
  19.     if ( (bpr=((width&7? width+8 : width)>>3))&1 ) bpr++;  /* word align   */
  20.     rows = height;
  21. #endif
  22.  
  23.     if (flags & PRINT_DATA)
  24.     {
  25.     fprintf(stream, "\n%sUSHORT %s%sData[] = \n   {\n",
  26.         (flags & STATIC_DATA ? "static " : ""),
  27.         (flags & LATTICE_CHIP ? "chip " : ""),
  28.         name );
  29.     if (flags & SPRITE_HEADER)
  30.         fprintf(stream, "   0x0000, 0x0000,%ls\n\n",
  31.         (flags & PRINT_COMMENTS ? " /* position control */" : "") );
  32.  
  33.  
  34.     for(d=0; d<depth; d++)
  35.         {
  36.         if (flags & COMPUTE_ONOFF)
  37.            {
  38.            r=0;
  39.            empty = 1;
  40.            while (r<rows && empty)
  41.              {
  42.              b=0;
  43.              while (b<bpr && empty)
  44.                {
  45.                if (*(USHORT *)(base+d*rows*bpr+r*bpr+b)) empty=0;
  46.                b+=2;
  47.                }
  48.              r++;
  49.              }
  50.            if (!empty) pl_pick |= 1<<d;
  51.            }
  52.         else pl_pick |= 1<<d;
  53.         if (!(flags & COMPUTE_ONOFF) ||
  54.            ((flags & COMPUTE_ONOFF) && !empty))
  55.            {
  56.            if (firstprinted==-1) firstprinted=d;
  57.            if (d!=firstprinted) fputc('\n', stream);
  58.            for(r=0; r<rows; r++)
  59.           {
  60.           fputs("   ", stream);
  61.           for(b=0; b<bpr; b+=2)
  62.              {
  63.              d_word = *(USHORT *)(base+d*rows*bpr+r*bpr+b);
  64.              sprintf(temp, "0000%x\0", d_word);
  65.              fprintf(stream, "0x%s, ", &temp[strlen(temp)-4]);
  66.              }
  67.           if (flags & PRINT_COMMENTS)
  68.              {
  69.              fputs("   /* ", stream);
  70.              for(b=0; b<bpr; b+=2)
  71.             {
  72.             d_word = *(USHORT *)(base+d*rows*bpr+r*bpr+b);
  73.             for(i=0xf; i!=0xff; i--)
  74.                if (d_word & (1<<i)) fputc('#', stream);
  75.                else fputc('.', stream);
  76.             }
  77.              fputs(" */", stream);
  78.              }
  79.           fputc('\n', stream);
  80.           }
  81.            }
  82.         }
  83.     if (flags & SPRITE_HEADER)
  84.         fprintf(stream, "\n   0x0000, 0x0000%ls\n",
  85.         (flags & PRINT_COMMENTS ? " /* next sprite field */" : "") );
  86.     fputs("   };\n", stream);
  87.     }
  88.  
  89.     if (flags & PRINT_IMAGE)
  90.     {
  91. #ifdef AMIGA
  92.     fprintf(stream, "struct Image %sImage = { %d,%d, %d,%d, %d, %sData, 0x%x,0x%x, NULL };\n",
  93.         name, x, y, width, height, depth, name, pl_pick, pl_onoff);
  94. #endif
  95.     }
  96. }
  97.  
  98.